Change xm dmesg -c so that it prints out the current buffer as well as clearing
authorEwan Mellor <ewan@xensource.com>
Wed, 21 Mar 2007 12:03:42 +0000 (12:03 +0000)
committerEwan Mellor <ewan@xensource.com>
Wed, 21 Mar 2007 12:03:42 +0000 (12:03 +0000)
it.  This avoids a race so that you don't lose messages, matches the behaviour
of the hypercall, and the Unix dmesg command.

Change the Xen-API binding to use a separate function host.dmesg_clear rather
than a flag on host.dmesg.

Signed-off-by: Ewan Mellor <ewan@xensource.com>
tools/python/xen/xend/XendAPI.py
tools/python/xen/xend/XendDmesg.py
tools/python/xen/xm/main.py

index a0f7c351b47adfff2f74ff2b9354e1063b609515..de9c1bffb1f63133997cd35608f1ccbf4bc136c2 100644 (file)
@@ -665,6 +665,7 @@ class XendAPI(object):
                     ('add_to_other_config', None),
                     ('remove_from_other_config', None),
                     ('dmesg', 'String'),
+                    ('dmesg_clear', 'String'),
                     ('get_log', 'String'),
                     ('send_debug_keys', None)]
     
@@ -742,11 +743,11 @@ class XendAPI(object):
             return xen_api_error(XEND_ERROR_HOST_RUNNING)
         return xen_api_error(XEND_ERROR_UNSUPPORTED)        
 
-    def host_dmesg(self, session, host_ref, clear):
-        if clear:
-            return xen_api_success(XendDmesg.instance().clear())
-        else:
-            return xen_api_success(XendDmesg.instance().info())
+    def host_dmesg(self, session, host_ref):
+        return xen_api_success(XendDmesg.instance().info())
+
+    def host_dmesg_clear(self, session, host_ref):
+        return xen_api_success(XendDmesg.instance().clear())
 
     def host_get_log(self, session, host_ref):
         log_file = open(XendLogging.getLogFilename())
index a3bc8c45b4d86ea138eb1231c16d6fe6585da20a..f4d0ff6be3b4a68930d48536bb25d425cd2481dd 100644 (file)
@@ -13,6 +13,7 @@
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 #============================================================================
 # Copyright (C) 2004, 2005 Mike Wray <mike.wray@hp.com>
+# Copyright (C) 2007       XenSource Inc.
 #============================================================================
 
 """Get dmesg output for this node.
@@ -28,7 +29,7 @@ class XendDmesg:
         return self.xc.readconsolering()
 
     def clear(self):
-        self.xc.readconsolering(True)
+        return self.xc.readconsolering(True)
 
 def instance():
     global inst
index 66a5951f7f5024e03ec224c60c6ab511f1609d40..372b4b251043960f219d663e146c159c6cf84806 100644 (file)
@@ -217,7 +217,7 @@ SUBCOMMAND_OPTIONS = {
        ('-q', '--quiet', 'Do not print an error message if the domain does not exist'),
     ),
     'dmesg': (
-       ('-c', '--clear', 'Clear dmesg buffer'),
+       ('-c', '--clear', 'Clear dmesg buffer as well as printing it'),
     ),
     'vnet-list': (
        ('-l', '--long', 'List Vnets as SXP'),
@@ -1587,17 +1587,16 @@ def xm_dmesg(args):
         usage('dmesg')
 
     if serverType == SERVER_XEN_API:
-        if not use_clear:
-            print server.xenapi.host.dmesg(
-                server.xenapi.session.get_this_host(),0)
+        host = server.xenapi.session.get_this_host()
+        if use_clear:
+            print server.xenapi.host.dmesg_clear(host),
         else:
-            server.xenapi.host.dmesg(
-                server.xenapi.session.get_this_host(),1)
+            print server.xenapi.host.dmesg(host),
     else:
         if not use_clear:
-            print server.xend.node.dmesg.info()
+            print server.xend.node.dmesg.info(),
         else:
-            server.xend.node.dmesg.clear()
+            print server.xend.node.dmesg.clear(),
 
 def xm_log(args):
     arg_check(args, "log", 0)